Exerccios Aula 3

**********************Distncia entre cidades************************************

Abaixo as distncias por estradas entre quatro cidades da Europa, em quilmetros: 

Atenas a Madri: 3949
Atenas a Paris: 3000
Atenas a Estocolmo: 3927
Madri a Paris: 1273
Madri a Estocolomo: 3188
Paris a Estocolmo: 1827

Construa uma matriz de distncias com esses valores.

dist = read.table("distancia.csv", header=T, sep=",", as.is=T, row.names=1)
dist

          Atenas Paris Madri Estocolmo
Atenas         0  3000  3949      3927
Paris       3000     0  1273      1827
Madri       3949  1273     0      3188
Estocolmo   3927  1827  3188         0

Compare sua matriz com o objeto eurodist, disponvel no pacote datasets.

#Comparando os resultados

dist.euro = as.matrix(eurodist)
dist.euro = as.data.frame(dist.euro)
names(dist.euro)

#Selecao dos valores a serem comparados
dist.sel=dist.euro[c(1,18,14,20),c(1,18,14,20)]
class(dist.sel)
dist.sel
dist

table(dist==dist.sel)

TRUE 
  16 



**********************Criao de um data frame************************************

Imagine um experimento em que hamsters de dois fentipos (claros e escuros) recebem trs tipos diferentes de dieta, e no qual as diferenas dos pesos (g) entre o fim e o incio do experimento sejam:

DIETA A	 DIETA B	 DIETA C
CLAROS	 0.1 , 1.1 , 3.7	 5.7, -1.2, -1.5	 3.0, -0.4, 0.6
ESCUROS	 1.5, -0.1, 2.0	 0.6, -3.0, -0.3	 -0.2, 0.3, 1.5

Crie um data frame com esses dados, na qual cada hamster seja uma linha, e as colunas sejam as variveis cor, dieta e variao do peso.

dieta=seq(1:18)
dieta = data.frame(dieta, row.names= NULL)
colnames(dieta)= "HAMSTER"
dieta$COR=c(rep("CLARO",9),rep("ESCURO",9))
dieta$DIETA=rep(c(rep("A",3),rep("B",3),rep("C",3)),2)
dieta$VAR_PESO=c(0.1,1.1,3.7,5.7,-1.2,-1.5,3.0,-0.4,0.6,1.5,-0.1,2.0,0.6,-3.0,-0.3,-0.2,0.3,1.5)

   HAMSTER    COR DIETA VAR_PESO
1        1  CLARO     A      0.1
2        2  CLARO     A      1.1
3        3  CLARO     A      3.7
4        4  CLARO     B      5.7
5        5  CLARO     B     -1.2
6        6  CLARO     B     -1.5
7        7  CLARO     C      3.0
8        8  CLARO     C     -0.4
9        9  CLARO     C      0.6
10      10 ESCURO     A      1.5
11      11 ESCURO     A     -0.1
12      12 ESCURO     A      2.0
13      13 ESCURO     B      0.6
14      14 ESCURO     B     -3.0
15      15 ESCURO     B     -0.3
16      16 ESCURO     C     -0.2
17      17 ESCURO     C      0.3
18      18 ESCURO     C      1.5




Qual a media por dieta e por fentipo?

Por fentipo

Claro:

H.claro = dieta$COR=="CLARO"
Media.claro = mean(dieta$VAR_PESO[H.claro])
Media.claro
[1] 1.233333

Escuro:

H.escuro = dieta$COR=="ESCURO"
Media.escuro = mean(dieta$VAR_PESO[H.escuro])
Media.escuro
[1] 0.2555556

Por dieta:

Dieta:A
media.a=mean(dieta$VAR_PESO[dieta$DIETA=="A"])
media.a
## 1.383333

Dieta:B
media.b=mean(dieta$VAR_PESO[dieta$DIETA=="B"])
media.b
## 0.05

Dieta:C
media.c=mean(dieta$VAR_PESO[dieta$DIETA=="C"])
media.c
## 0.8


DICA: Use as funes de gerar repeties para criar os vetores dos tratamentos.

OPCIONAL: depois de fazer este exerccio com as funes de repetio, experimente repet-lo com a funo expand.grid


**********************Criando uma Matriz************************************


Crie um objeto da classe matriz com 5 colunas e 3 linhas contendo uma amostra de uma distribuio normal de mdia 10 e varincia 3,6. 

Mude os nomes das linhas para L1 a L3 e das colunas para C1 a C5. Dica: A funo paste pode poupar trabalho.

##Criao de uma matriz

matrix.3=matrix(rnorm(15, mean=10, sd=3.6), nrow=3, ncol=5)
matrix.3
colnames(matrix.3)=paste("C",1:5)
rownames(matrix.3)=paste("L",1:3)

          C 1       C 2       C 3      C 4       C 5
L 1  9.050966  6.370406 12.640716  3.52897 12.719757
L 2 14.689244  6.380764 11.956139  6.20769  2.471119
L 3  9.596716 10.057298  8.651841 17.92962  8.922320


Calcule a mdia e a varincia por colunas e depois por linhas. Guarde os resultados em um dataframe diferenciando varincia de mdia em dois vetores. 

## Contagem do Data.Frame

col.lin = c(paste("Col",1:5),paste("Lin",1:3))
col.lin
col.lin = data.frame(col.lin, row.names=NULL )

## Criando a coluna Media
col.lin$MEDIA = c(mean(matrix.3[ ,1]),mean(matrix.3[ ,2]),mean(matrix.3[ ,3]),mean(matrix.3[ ,4]),mean(matrix.3[ ,5]),mean(matrix.3[ 1,]),mean(matrix.3[2 ,]),mean(matrix.3[3 ,]))

## Criando a coluna var
col.lin$VAR = c(var(matrix.3[ ,1]),var(matrix.3[ ,2]),var(matrix.3[ ,3]),var(matrix.3[ ,4]),var(matrix.3[ ,5]),var(matrix.3[1 ,]),var(matrix.3[2 ,]),var(matrix.3[3 ,]))
col.lin

  col.lin     MEDIA       VAR
1   Col 1 11.112309  9.670312
2   Col 2  7.602823  4.518364
3   Col 3 11.082899  4.549693
4   Col 4  9.222094 58.659674
5   Col 5  8.037732 26.845514
6   Lin 1  8.862163 15.961485
7   Lin 2  8.340991 24.054619
8   Lin 3 11.031560 15.175796


**********************Lendo e Salvando seus dados************************************


Leia um arquivo de dados de sua autoria e faa um sumrio das variveis independentes. Caso no tenha dados, ter que ir a campo, ou utilize alguns dos dados da rea Arquivos de dados da nossa pgina . 

#Arquivo esaligna.csv

esal=read.table("esaligna.csv", header=T, sep=",", as.is=T)
esal$classe
str(esal)
head(esal)

Faa uma seleo de um estado de atributo de um vetor fator e salve em um objeto (uma espcie, uma localidade), mantendo todos os outros dados. Em seguida selecione apenas trs colunas dos dados e salve em outro objeto e depois em um arquivo de formato .txt, separado por tabulao e sem nome de linhas. Lembre-se de olhar o help antes de surtar! Para verificar se o arquivo est correto abra-o no EXeCELente programa da Microsoft! 

#Selecionando da coluna classe o fator A

esal.ob=esal[esal$classe=="a",]
esal.ob

  arvore classe talhao dap    ht tronco sobra folha total
4       8      a     32 9.0  7.72  12.28  9.99 27.67 49.95
5       9      a     32 7.0  6.55  11.86  7.97  7.76 27.61
9       1      a     22 7.0 11.60  16.19  1.81  0.65 18.66
10      2      a     23 6.3  6.36   6.40  5.92  0.93 13.27
13      3      a     18 7.0 11.30   6.11  8.23  1.12 15.47
16      4      a     16 6.0  7.53   8.51  6.66  1.61 16.78
19      5      a     17 5.9 11.26   3.83  4.14  0.12  8.10
21      6      a     32 7.0  6.74   5.64  5.38  0.72 11.74
23      7      a     16 6.0  8.12   1.96  4.86  0.84  7.67
27     10      a     17 9.4 12.64  31.78 36.72 11.92 80.44


#Selecionando 3 colunas de esal.ob
esal.3ob=esal.ob[,1:3]
esal.3ob

   arvore classe talhao
4       8      a     32
5       9      a     32
9       1      a     22
10      2      a     23
13      3      a     18
16      4      a     16
19      5      a     17
21      6      a     32
23      7      a     16
27     10      a     17

#Criando o arquivo .txt
write.table(esal.3ob, file = "esal.3ob.txt", append = FALSE, quote = TRUE, sep = " ,",dec = ".", row.names = FALSE, col.names = TRUE, qmethod = c("escape", "double"))



**********************Classes de Objetos************************************

O pacote datasets contm vrios conjuntos de dados para uso em treinamento com a linguagem R. 

O conjunto iris  distribudo de duas formas diferentes, nos objetos iris e iris3. So quatro medidas de flores de trs espcies de Iris (Iridaceae). 

Quais so as classes desses dois objetos?

#Verificando Classes
> class(iris)
[1] "data.frame"
> class(iris3)
[1] "array"


Calcule a mdia de cada uma das quatro medidas por espcie, dos dois objetos. DICA: as fues da famlia apply iro te ajudar.

> #Calculo das mdias

Para o arquivo iris:

> media.setosa=apply(iris.setosa,2,mean)
> media.setosa
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
       5.006        3.428        1.462        0.246 
> media.versicolor=apply(iris.versicolor,2,mean)
> media.versicolor
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
       5.936        2.770        4.260        1.326 
> media.virginica=apply(iris.virginica,2,mean)
> media.virginica
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
       6.588        2.974        5.552        2.026

Para arquivo iris3:

> #Calculo de media para Setosa
> setosa=iris3.temp[,1:4]
> #setosa
> media.setosa.2=apply(setosa,2,mean)
> media.setosa.2
Sepal L..Setosa Sepal W..Setosa Petal L..Setosa Petal W..Setosa 
          5.006           3.428           1.462           0.246 
> 
> #Calculo de media para Versicolor
> versicolor=iris3.temp[,5:8]
> #versicolor
> media.versicolor.2=apply(setosa,2,mean)
> media.versicolor.2
Sepal L..Setosa Sepal W..Setosa Petal L..Setosa Petal W..Setosa 
          5.006           3.428           1.462           0.246 
> 
> #Calculo de media para Virginica
> virginica=iris3.temp[9:12]
> #virginica
> media.virginica.2=apply(setosa,2,mean)
> media.virginica.2
Sepal L..Setosa Sepal W..Setosa Petal L..Setosa Petal W..Setosa 
          5.006           3.428           1.462           0.246 

Os nomes das variaveis esto em ingls. Mude-os para portugus no objeto iris. DICA: Como tudo mais no R, os resultados da funo names podem ser armazenados em um objeto.


> #Mudar os nomes de ingles para portugues
> iris.temp=iris
> names(iris.temp)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     
> colnames(iris.temp)=c("Comprimento.Sepala","Largura.Sepala","Comprimento.Petala","Largura.Petala","Espcies")
> names(iris.temp)
[1] "Comprimento.Sepala" "Largura.Sepala"     "Comprimento.Petala"
[4] "Largura.Petala"     "Espcies"   


**********************Acrescentando Dados de Sntese************************************


Crie um objeto com os dados do arquivo-texto esaligna.csv.

Verifique o contedo do objeto resultante, com a funo summary.
Acrescente uma nova coluna ao data frame resultante, com a soma das biomassas de folhas e do tronco de cada rvore.
Acrescente outra coluna, com o valor da rea basal de cada rvore.
Calcule a rea basal total por talho e salve em um objeto
Calcule a mdia por talho
Selecione apenas os dados relativos  rvores com mais de 10 cm de dimetro
Salve em um arquivo txt, seperado por tabulao.


##Acrescentando dados de Sntese

esaligna=read.table("esaligna.csv", header=T, sep=",", as.is=T, row.names=NULL)
summary(esaligna)

#Criando coluna Biomassa Total
esaligna$Biomass.total=esaligna$tronco+esaligna$folha
summary(esaligna)

#Criando coluna Area Basal
esaligna$Area.Basal=(pi*(esaligna$dap^2))/4

head(esaliga)

#Calculo da Area Basal por talho
area.basal.talhao = xtabs(Area.Basal~talhao, data=esaligna)
area.basal.talhao


#Calculo da media por talhao
unique(esaligna$talhao)

#22
mean.esaligna22 = apply(esaligna[esaligna$talhao==22,4:11],2,mean)
mean.esaligna22

#23
mean.esaligna23 = apply(esaligna[esaligna$talhao==23,4:11],2,mean)
mean.esaligna23

#32
mean.esaligna32 = apply(esaligna[esaligna$talhao==32,4:11],2,mean)
mean.esaligna32

#18
mean.esaligna18 = apply(esaligna[esaligna$talhao==18,4:11],2,mean)
mean.esaligna18

#16
mean.esaligna16 = apply(esaligna[esaligna$talhao==16,4:11],2,mean)
mean.esaligna16

#17
mean.esaligna17 = apply(esaligna[esaligna$talhao==17,4:11],2,mean)
mean.esaligna17

temp1=c("DAP","HT","TRONCO","SOBRA","FOLHA","TOTAL","BIOMASS.TOTAL","AREA.BASAL")
tabela.talhao = data.frame(temp1, row.names=NULL)
tabela.talhao
names(tabela.talhao)="Parametro"
tabela.talhao$Talhao22=mean.esaligna22
tabela.talhao$Talhao23=mean.esaligna23
tabela.talhao$Talhao32=mean.esaligna32
tabela.talhao$Talhao18=mean.esaligna18
tabela.talhao$Talhao16=mean.esaligna16
tabela.talhao$Talhao17=mean.esaligna17

      Parametro Talhao22  Talhao23   Talhao32   Talhao18  Talhao16   Talhao17
1           DAP  15.3800  13.58750  13.150000  11.633333 10.366667  12.985714
2            HT  17.2860  13.78250   9.798571  13.720000 11.553333  15.818571
3        TRONCO 109.8880  74.78875  66.435714  54.543333 36.008333  82.475714
4         SOBRA  14.8980  14.93625  21.468571   8.956667  9.425000  13.855714
5         FOLHA   5.5800   5.49875  17.941429   2.210000  3.021667   5.444286
6         TOTAL 130.3780  95.23500 105.855714  65.723333 48.463333 101.787143
7 BIOMASS.TOTAL 115.4680  80.28750  84.377143  56.753333 39.030000  87.920000
8    AREA.BASAL 204.6763 163.25777 162.409401 115.822667 93.527831 156.869819

#Arvores com mais de 10cm de diametro

Arvores.sel=esaligna[esaligna$dap>=10,]
Arvores.sel

   arvore classe talhao   dap    ht tronco sobra folha  total Biomass.total Area.Basal
1       6      c     22 19.90 21.50 183.64 20.42  8.57 212.64        192.21  311.02553
2       8      b     23 12.40 15.74  42.29  6.58  2.52  51.40         44.81  120.76282
3       7      c     32 16.50 11.74  60.61 11.35 48.52 120.49        109.13  213.82465
6       9      b     32 10.50  8.79  26.10  7.48 23.36  56.95         49.46   86.59015
7       1      c     22 13.00 12.86  47.84 12.14  2.33  62.32         50.17  132.73229
8       2      c     22 20.00 20.05 183.07 32.18 14.56 229.83        197.63  314.15927
11      1      b     23 15.50 18.20 103.39 14.17  5.26 122.83        108.65  188.69191
14      3      b     18 12.50 15.70  68.72  9.24  1.87  79.85         70.59  122.71846
15      4      b     16 10.40 10.52  25.28  6.91  2.57  34.76         27.85   84.94867
17      5      b     23 12.30 14.20  47.19  5.94  3.94  57.08         51.13  118.82289
18      6      b     17 10.00 11.36  26.43  5.79  2.01  34.23         28.44   78.53982
20      3      c     32 20.05 11.40 158.66 42.28  6.69 207.64        165.35  315.73203
22      4      c     16 15.30 14.90  90.81 18.46  8.28 117.56         99.09  183.85386
25      5      c     16 12.50 11.05  39.51 14.37  3.73  57.62         43.24  122.71846
26      8      c     17 22.00 25.52 272.16 18.25  9.49 299.91        281.65  380.13271
28      9      c     22 17.00 20.42 118.70  7.94  1.79 128.44        120.49  226.98007
29     10      c     17 16.00 17.30  98.45 11.71  5.45 115.63        103.90  201.06193
30     10      b     16 12.00 17.20  49.98  5.29  1.10  56.39         51.08  113.09734
31      1      d     23 17.00 16.20 118.12 21.10  7.11 146.33        125.23  226.98007
32      2      d     23 13.70 11.80  50.17  7.32  4.45  61.96         54.62  147.41138
33      3      d     23 23.00 16.80 217.04 55.18 18.88 291.10        235.92  415.47563
34      4      d     32 22.00 15.65 189.90 65.83 10.87 266.61        200.77  380.13271
35      5      d     17 19.00 18.60 119.26 15.88  7.65 142.79        126.91  283.52874
36      6      d     18 15.40 14.16  88.80  9.40  3.64 101.85         92.44  186.26503


#Criando arquivo texto
write.table(Arvores.sel,"Arvores_DAP_10cm.txt", append = FALSE, quote = TRUE, sep = ",",eol = "\n", na = "NA", dec = ".", row.names = FALSE, col.names = TRUE, qmethod = c("escape", "double"))






